// 给定字符串 s 和 t ，判断 s 是否为 t 的子序列。
// 你可以认为 s 和 t 中仅包含英文小写字母。字符串 t 可能会很长（长度 ~= 500,000），
// 而 s 是个短字符串（长度 <=100）。
// 字符串的一个子序列是原始字符串删除一些（也可以不删除）字符而不改变剩余字符相对位置形成的新字符串。
// （例如，"ace"是"abcde"的一个子序列，而"aec"不是）。

function isSubsequence(s: string, t: string): boolean {
  if (s.length < 1) {
    // 边界情况
    return true;
  }
  let currS: number = 0;// 声明S指针
  let currT: number = 0;// 声明T指针
  while (currT < t.length) {
    if (s[currS] === t[currT]) {
      currS++;
      // 若当前的S指针已经遍历到末尾，则直接结束循环
      if(currS === s.length){
          return true;
      }
    }
    currT++;
  }
  return currS === s.length;// 末尾相等的情况不要忘记考虑
}

// 这道题目也是一道比较典型的使用双指针求解的题目
// 首先声明一个双指针，分别指向字符串s和t的起始索引
// 我们对长字符串t进行遍历，思路比较简单
// 如果当前两个指针所处的字符串索引相等时，则指向S的指针向后移动一位
// 其次若当前的S指针已经遍历到末尾，则直接结束循环
// 默认情况下每迭代一次，指针T都向右移动一位
// 最后不要忘记考虑两个边界情况：
// 1、S\T指针末尾才满足相等的情况不要忘记考虑
// 2、S为空字符串的情况不要忘记考虑。

